/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jsf.util;

import java.beans.*;
import java.io.Serializable;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import static jsf.util.SemanticSearch.PROP_SAMPLE_PROPERTY;

/**
 *
 * @author Geymen
 */
public class SemanticSearch implements Serializable {
    
    public static final String PROP_SAMPLE_PROPERTY = "sampleProperty";
    private String sampleProperty;
    private ArrayList courseList;
    private PropertyChangeSupport propertySupport;
    
    public SemanticSearch() {
        propertySupport = new PropertyChangeSupport(this);
    }
    
    public String getSampleProperty() {
        return sampleProperty;
    }
    
    public void setSampleProperty(String value) {
        String oldValue = sampleProperty;
        sampleProperty = value;
        propertySupport.firePropertyChange(PROP_SAMPLE_PROPERTY, oldValue, sampleProperty);
    }
    
    private EntityManagerFactory emf = Persistence.createEntityManagerFactory("EducationXPU");

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }
    
    public void getRecommendedCoursesForUserID(Integer userID) {
        try {
            //        Connection con = DriverManager.getConnection("jdbc:default:connection");
                    
                    EntityManager eM = null;
                    eM = getEntityManager();
                    eM.getTransaction().begin();
                    
                    // we are getting the connection string. 
                    Connection connection = eM.unwrap(java.sql.Connection.class); // unwraps the Connection class.
                    CallableStatement cs = null;
                    
                    eM.getTransaction().commit();
                    
                    
                    cs = connection.prepareCall("{call GetSemanticCourses(?)}");
                    cs.setInt(1, 1);
                    ResultSet rs = cs.executeQuery();

            while (rs.next()) {
                String courseid = rs.getString("courseid");
                System.out.println("courseID" + ": " + courseid);
            }
        } catch (SQLException ex) {
            Logger.getLogger(RecommendationBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.addPropertyChangeListener(listener);
    }
    
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.removePropertyChangeListener(listener);
    }
}
